﻿using System;
using System.Web.Mvc;
using System.Web.Routing;
using Project.MVC.Web.Helper;
using Project.MVC.Web.Models;
using Project.Mvc.Web.Controllers;

namespace Project.MVC.Web.Controllers
{

    [HandleError]
    public class AccountController : ApplicationBaseController
    {

        public IFormsAuthenticationService FormsService { get; set; }
        public IMembershipService MembershipService { get; set; }

        protected override void Initialize(RequestContext requestContext)
        {
            if (FormsService == null) { FormsService = new FormsAuthenticationService(); }
            if (MembershipService == null) { MembershipService = new AccountMembershipService(); }

            base.Initialize(requestContext);
        }

        // **************************************
        // URL: /Account/LogOn
        // **************************************

        public ActionResult LogOn()
        {
            return View();
        }

        [HttpPost]
        public ActionResult LogOn(LogOnModel model, string returnUrl)
        {
            ViewData["LoginFail"] = "";
            if (ModelState.IsValid)
            {
                if (MembershipService.ValidateUser(model.UserName, CryptorHelper.Encrypt(model.Password, true)))
                {
                    FormsService.SignIn(model.UserName, model.RememberMe); 
                    //đăng nhập thành công ==> lấy thông tin cấu hình
                    //getAppConfig();
                    //ghi lại nhật ký
                    LogEvent(model.UserName, "ĐĂNG NHẬP", "ĐĂNG NHẬP THÀNH CÔNG", true);
                    if (!String.IsNullOrEmpty(returnUrl))
                    {
                        return Redirect(returnUrl);
                    }
                    else
                    {
                        return RedirectToAction("Index", "Home");
                    }
                    
                }
                else
                {
                    LogEvent(model.UserName, "ĐĂNG NHẬP", "ĐĂNG NHẬP KHÔNG THÀNH CÔNG", false);
                    ViewData["LoginFail"] = "LoginFail";
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }

        // **************************************
        // URL: /Account/LogOff
        // **************************************

        public ActionResult LogOff()
        {
            FormsService.SignOut();
            LogEvent("THOÁT", "KẾT THÚC PHIÊN LÀM VIỆC");
            return RedirectToAction("Index", "Home");
        }

        // **************************************
        // URL: /Account/RestrictedAccess
        // **************************************

        public ActionResult RestrictedAccess()
        {
            return View();
        }

        // **************************************
        // URL: /Account/Register
        // **************************************

        
        //public ActionResult Register()
        //{
        //    ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
        //    return View();
        //}

        //[HttpPost]
        //public ActionResult Register(RegisterModel model)
        //{
        //    if (ModelState.IsValid)
        //    {
        //        // Attempt to register the user
        //        var createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email);

        //        if (createStatus == MembershipCreateStatus.Success)
        //        {
        //            FormsService.SignIn(model.UserName, false /* createPersistentCookie */);
        //            return RedirectToAction("Index", "Home");
        //        }
        //        else
        //        {
        //            ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus));
        //        }
        //    }

        //    // If we got this far, something failed, redisplay form
        //    ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
        //    return View(model);
        //}

        //// **************************************
        //// URL: /Account/ChangePassword
        //// **************************************

        //[Authorize]
        //public ActionResult ChangePassword()
        //{
        //    ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
        //    return View();
        //}

        //[Authorize]
        //[HttpPost]
        //public ActionResult ChangePassword(ChangePasswordModel model)
        //{
        //    if (ModelState.IsValid)
        //    {
        //        if (MembershipService.ChangePassword(User.Identity.Name, model.OldPassword, model.NewPassword))
        //        {
        //            return RedirectToAction("ChangePasswordSuccess");
        //        }
        //        else
        //        {
        //            ModelState.AddModelError("", "The current password is incorrect or the new password is invalid.");
        //        }
        //    }

        //    // If we got this far, something failed, redisplay form
        //    ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
        //    return View(model);
        //}

        //// **************************************
        //// URL: /Account/ChangePasswordSuccess
        //// **************************************

        //public ActionResult ChangePasswordSuccess()
        //{
        //    return View();
        //}

        /// <summary>
        /// son.le - 2011.07.01; lấy thông số cấu hình vào AppConfigModel
        /// </summary>
        //[Authorize]
        //private void getAppConfig()
        //{
        //    try
        //    {
        //        var list = new DMCauHinhServices().GetList();
        //        if (list != null)
        //        {
        //            //Dấu phân cách thập phân
        //            var value = list.Find(delegate(DMCauHinhInfo info) { return info.MaCauHinh == 'P'; });
        //            AppConfigModel.DecimalSymbol = value != null ? value.GiaTri : ",";

        //            //Dấu phân cách nhóm
        //            value = list.Find(delegate(DMCauHinhInfo info) { return info.MaCauHinh == 'G'; });
        //            AppConfigModel.GroupingSymbol = value != null ? value.GiaTri : ".";

        //            //Số ký tự phần thập phân
        //            value = list.Find(delegate(DMCauHinhInfo info) { return info.MaCauHinh == 'D'; });
        //            AppConfigModel.DecimalPlaces = value != null && value.GiaTri.IsNumeric() ? (int)value.GiaTri.ToInt32() : 2;

        //            //Số chữ số được làm tròn đối với tiền
        //            value = list.Find(delegate(DMCauHinhInfo info) { return info.MaCauHinh == 'R'; });
        //            AppConfigModel.CurrencyFormat = value != null && value.GiaTri.IsNumeric() ? (int)value.GiaTri.ToInt32() : 3;

        //            //Quy tắc làm tròn số
        //            value = list.Find(delegate(DMCauHinhInfo info) { return info.MaCauHinh == 'T'; });
        //            AppConfigModel.RoundRule = value != null ? value.GiaTri.Trim()[0] : 'T';

        //            //Tính lãi những ngày cho phép trễ
        //            value = list.Find(delegate(DMCauHinhInfo info) { return info.MaCauHinh == 'H'; });
        //            AppConfigModel.AddLate = value != null ? value.GiaTri.Trim()[0] : 'T';
        //        }

        //    }
        //    catch (Exception)
        //    {
        //        throw;
        //    }
        //}
    }
}